#!/usr/bin/env python
# -*- coding: utf-8 -*-

"""
实名认证查询模型
"""

from typing import Dict, Any, Optional, List
from dataclasses import dataclass, asdict
from jlpay.model.base import OrgBaseReq, BaseResponse


class ChannelType:
    """渠道类型枚举"""
    ALL = "00"      # 所有渠道
    WECHAT = "01"   # 微信
    ALIPAY = "02"   # 支付宝


class RealNameQueryRequest(OrgBaseReq):
    """实名认证查询请求参数"""
    
    API_URL = "/open/merch/access/realname/query"
    
    def __init__(self):
        """初始化实名认证查询请求"""
        super().__init__()
        self.merch_no = None
        self.query_type = "0"  # 0-申请单查询（默认），1-授权结果查询
        self.channel_type = ChannelType.ALL  # 渠道类型，默认所有渠道
    
    def set_merch_no(self, merch_no: str):
        """
        设置商户号
        
        Args:
            merch_no: 商户号
            
        Returns:
            RealNameQueryRequest实例
        """
        self.merch_no = merch_no
        return self
    
    def set_query_type(self, query_type: str):
        """
        设置查询类型
        
        Args:
            query_type: 0-申请单查询（默认），1-授权结果查询
            
        Returns:
            RealNameQueryRequest实例
        """
        self.query_type = query_type
        return self
    
    def set_channel_type(self, channel_type: str):
        """
        设置渠道类型
        
        Args:
            channel_type: 00-所有渠道，01-微信，02-支付宝
            
        Returns:
            RealNameQueryRequest实例
        """
        self.channel_type = channel_type
        return self
    
    def to_dict(self) -> Dict[str, Any]:
        """转换为字典格式"""
        return super().to_dict()


@dataclass
class RealNameInfo:
    """实名认证信息"""
    
    def __init__(self, **kwargs):
        """
        初始化实名认证信息
        
        Args:
            **kwargs: 字段参数
        """
        # 申请状态，1-审核中，2-待确认联系信息，3-待账户验证，4-审核通过，5-审核驳回，6-已冻结，7-已作废（query_type=0时返回）
        self.applyment_status = kwargs.get('applyment_status', '')
        
        # 二维码链接地址，二维码url地址（微信二维码有效期30分钟）
        self.qrcode_data = kwargs.get('qrcode_data', '')
        
        # 驳回字段，驳回的字段名
        self.reject_param = kwargs.get('reject_param', '')
        
        # 审核驳回原因，实名认证驳回原因
        self.reject_reason = kwargs.get('reject_reason', '')
        
        # 授权状态，200-已授权，201-未授权（query_type=1时返回）
        self.authorize_state = kwargs.get('authorize_state', '')

    def to_dict(self) -> Dict[str, Any]:
        """转换为字典格式"""
        return {
            'applyment_status': self.applyment_status,
            'qrcode_data': self.qrcode_data,
            'reject_param': self.reject_param,
            'reject_reason': self.reject_reason,
            'authorize_state': self.authorize_state
        }


class RealNameQueryResponse(BaseResponse):
    """实名认证查询响应参数"""
    
    def __init__(self, response_dict=None):
        """
        初始化响应对象
        
        Args:
            response_dict: 响应字典
        """
        # 先调用父类初始化，处理ret_code, ret_msg等基础字段
        super().__init__(response_dict)
        
        # 初始化特定字段
        self.realname_info = []  # 实名认证信息列表
        
        if response_dict:
            # 处理实名认证信息列表
            realname_info_list = response_dict.get('realname_info', [])
            if realname_info_list and isinstance(realname_info_list, list):
                for info_data in realname_info_list:
                    if isinstance(info_data, dict):
                        self.realname_info.append(RealNameInfo(**info_data))
                    else:
                        self.realname_info.append(info_data)

    def to_dict(self) -> Dict[str, Any]:
        """转换为字典格式"""
        data = super().to_dict()
        data['realname_info'] = [info.to_dict() if hasattr(info, 'to_dict') else info for info in self.realname_info]
        return data 